#ifndef __System_SystemT_H__
#define __System_SystemT_H__

#define Declare_System(T, Ti) \
	Declare_System_IComparable(T, Ti) \
	Declare_System_Action(T, Ti) \
	Declare_System_Comparison(T, Ti) \
	Declare_System_Predicate(T, Ti) \
	Declare_System_Array_IndexOf(T, Ti) \
	Declare_System_Array_LastIndexOf(T, Ti) \
	Declare_Collections_IComparer(T, Ti) \
	Declare_System_Array_BinarySearch(T, Ti) \
	Declare_System_Array_Sort(T, Ti) \
	/* collections */ \
	Declare_Collections_IArraySortHelper(T, Ti) \
	Declare_Collections_IArraySortHelper2(T, Ti, T, Ti) \
	Declare_Collections_IEnumerator(T, Ti) \
	Declare_Collections_IEnumerable(T, Ti) \
	Declare_Collections_IEqualityComparer(T, Ti) \
	Declare_Collections_Comparer(T, Ti) \
	Declare_System_ArrayXFunctorComparer(T, Ti) \
	Declare_System_ArrayXSZArrayEnumerator(T, Ti) \
	Declare_System_Array(T, Ti) \
	Declare_Collections_GenericComparer(T, Ti) \
	Declare_Collections_EqualityComparer(T, Ti) \
	/* collections.1 */ \
	Declare_Collections_ICollection(T, Ti) \
	Declare_Collections_IList(T, Ti) \
	Declare_Collections_List(T, Ti) \
	\
	array_Declare_GetEnumerable(T, Ti)

#define Implement_System(T, Ti) \
	Implement_System_Array_IndexOf(T, Ti) \
	Implement_System_Array_LastIndexOf(T, Ti) \
	Implement_Collections_IComparer(T, Ti) \
	Implement_System_Array_BinarySearch(T, Ti) \
	Implement_System_Array_Sort(T, Ti) \
	/* collections */ \
	Implement_Collections_IEnumerator(T, Ti) \
	Implement_Collections_IEnumerable(T, Ti) \
	Implement_Collections_IEqualityComparer(T, Ti) \
	Implement_Collections_Comparer(T, Ti) \
	Implement_System_ArrayXFunctorComparer(T, Ti) \
	Implement_System_ArrayXSZArrayEnumerator(T, Ti) \
	Implement_System_Array(T, Ti) \
	Implement_Collections_GenericComparer(T, Ti) \
	Implement_Collections_EqualityComparer(T, Ti) \
	/* collections.1 */ \
	Implement_Collections_ICollection(T, Ti) \
	Implement_Collections_List(T, Ti) \
	\
	array_Implement_GetEnumerable(T, Ti)

#endif /* __System_SystemT_H__ */